﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SyncList.Business.ValueObject;

namespace SyncList.Business
{

    /// <summary>
    /// Interface permettant la fusion de listes
    /// </summary>
    public interface IFusionService
    {

        /// <summary>
        ///// Calculer les données de fusion 
        ///// </summary>
        ///// <param name="dataCollection">Collection complète de tous les utilisateurs</param>
        ///// <returns></returns>
        //FileFusionCollection ComputeFusion(IEnumerable<Data> dataCollection);


       /// <summary>
        /// Organiser plusieurs fichiers sous forme d'une unique arborescence explorable.
        /// Les fichiers de l'utilisateur en cours ne sont pas visibles mais servent à définir les flags.
        /// </summary>
        /// <param name="dataList">Liste de fichiers</param>
        /// <param name="currentUserName">Utilisateur courant</param>
        /// <returns>Arborescence</returns>
        DirectoryContent OrganizeInDirectories(IEnumerable<Data> dataList, string currentUserName);


        /// <summary>
        /// Cocher les fichiers que j'ai déjà
        /// </summary>
        /// <param name="root">Racine de l'arbre</param>
        /// <param name="listOfFileToCompare">Liste des fichiers à comparer</param>
        /// <param name="currentUserName">Utilisateur en cours</param>
        void CheckFiles(DirectoryContent root, List<Data> listOfFileToCompare, string currentUserName);


        
        /// <summary>
        /// Vérifier que tous les fichiers d'un dossier sont d'un même état pour propager cet état
        /// </summary>
        void CheckDirectoriesStates(DirectoryContent root);

    }

}
